"""
编写一个拥有三个参数(M, N, p) 的程序：并生成一个M行N列的布尔类型数组，依
据概率p填入“地雷”。在扫雷游戏中，已被占有的一格为“地雷”，未被占有的
一格为“安全”格。用星号“*”表示“地雷”，用半角句号“.”表示“安全”
格，打印出此数组。然后，使用邻近（上、下、左、右及对角线）地雷的数量来
替换安全格的句号并打印结果。

"""
import random 

def minesweeper(m,n,p):
    # 创建大一圈的棋盘 可以忽略边和角的特殊情况 
    board = [[None]*(n+2) for i in range(m+2)]
    for i in range(1,m+1):
        for j in range(1,n+1):
            r = random.random()
            board[i][j] = -1 if r<p else 0
    
    for i in range(1,m+1):
        for j in range(1,n+1):
            print('*',end=' ') if board[i][j]==-1 else print('.',end=' ')
        print()
    
    # 给安全格子赋值
    for i in range(1,m+1):
        for j in range(1,n+1): 
            if board[i][j] ==0:
                for ii in range(i-1,i+2):
                    for jj in range(j-1,j+2):
                        if board[ii][jj]==-1:
                            board[i][j] += 1 

    print()
    
    for i in range(1,m+1):
        for j in range(1,n+1):
            print('*',end=' ') if board[i][j]==-1 else print(board[i][j],end=' ')
        print()



minesweeper(5,10,0.2)
